<?php                                                                                                                                                                     
/* -------------------------------------------------------------------------
 * File Name : class_db.php
 * -------------------------------------------------------------------------                                                                                              
 */
 
// Include
include(SITE_ROOT . '/db/config.php');

class DataBase
{
    var $MyConn;           // link_number
    var $result;           // résultat du "query"
    var $sort;
    var $num_rows;         // nombre de champs renvoyés
    var $affectedRows;     // nombres de rows concernés
    var $isConnected;
    var $id_autoincremented; // nouvel ID créé lors d'un insert "autoincrement"

//************************************** ERROR LOGIN ************************************
function log_err($mysql_function,$error)
{
     $line = date("Y-m-d-h:i:s") . " ; Function : " . $mysql_function . " ; Page : " . $_SERVER['SCRIPT_NAME'] . " ; Query : " . $_SERVER['QUERY_STRING'] . " ; " . $error . "\r\n";
     //echo getcwd();
     $curdir = getcwd();
     $log_dir = "./";
     $log_file = "log-".date("Y-m-d").".txt";
     chdir($log_dir);
     $fp = fopen($log_file,"a+");
     fputs($fp,$line);
     fclose($fp);
     chdir($curdir);
}
//************************************** CONNECTION ************************************
function connect() {
    if ($this->isConnected == false) {
      global $MyServer;
      global $MyUser;
      global $MyBdd;
      global $MyPasswd;

      if(!$this->MyConn = mysql_connect($MyServer, $MyUser, $MyPasswd) )
      {
          $this->log_err("Connect","Problème de connexion avec la Base de Données L1");
          if(!$this->MyConn = mysql_connect($MyServer, $MyUser, $MyPasswd) )
          {
              $this->log_err("Connect","Problème de connexion avec la Base de Données L2");
              if(!$this->MyConn = mysql_connect($MyServer, $MyUser, $MyPasswd) )
              {
                  $this->log_err("Connect","Problème de connexion avec la Base de Données L3");
                  die ("Problème de connexion avec la Base de Données L3");
              }
          }

      }
      if(mysql_select_db($MyBdd, $this->MyConn))
      {
         $this->isConnected = true;
      }
      else
      {
         $this->log_err("Connect","Impossible de sélectionner la Base de Données L1");
         if(mysql_select_db($MyBdd, $this->MyConn))
         {
              $this->isConnected = true;
         }
         else
         {
              $this->log_err("Connect","Impossible de sélectionner la Base de Données L2");
              if(mysql_select_db($MyBdd, $this->MyConn))
              {
                   $this->isConnected = true;
              }
              else
              {
                   $this->log_err("Connect","Impossible de sélectionner la Base de Données L3");
                   die ("Impossible de sélectionner la Base de Données");
              }
         }
      }
    }
    return $this->MyConn;
}

//************************************** DECONNECTION ************************************

  function disconnect()
  // se déconnecter de la base
    {
    if ($this->isConnected == true)
      if(!@mysql_close($this->MyConn))
      {
         $this->log_err("Disconnect","Impossible de deconnecter la Base de Données");
         //die ("Impossible de deconnecter la Base de Données");
      }
    else
      echo('');
      //echo("On ne peut déconnecter une Base non connectée");
    }




//*********************************** CALCULE NBRE LIGNES *****************************************

  function select_query($query)
  // fait une requete select
  // $query : la requète complète (y compris le select)
  // retour : $result. (normalement pas utilisé)
  // mise à jour de $num_rows
    {

    if ($this->isConnected == false)
      $this->connect();
    $this->num_rows = -1;

    if(!$this->result = mysql_query($query))
    {
            $this->log_err("select_query","<P>L1 (select_query) Erreur lors de la connection à la base. Result: $this->result.<br>Requete=".$query."</P>");
            if(!$this->result = mysql_query($query))
            {
                   $this->log_err("select_query","<P>L2 (select_query) Erreur lors de la connection à la base. Result: $this->result.<br>Requete=".$query."</P>");
                   die ("<P>L2 (select_query) Erreur lors de la connection à la base. Result: $this->result.<br>Requete=".$query."</P>");
            }
    }
    $this->num_rows = mysql_num_rows($this->result);
    return $this->num_rows;
    }
 
//************************* APRES IDU -> MISE A JOUR (incrémentation id) **************************

  function iud_query($query)
  // fait une requete insert, update ou delete
  // $query : la requète complète
  // retour : $result. (normalement pas utilisé)
  // mise à jour de $affectedRows
    {
    if ($this->isConnected == false)
      $this->connect();
    $this->affectedRows = -1;

    if (! $this->result = mysql_query($query))
      {
          $this->log_err("iud_query","(iud_query) Erreur lors de la connection à la base. Result: $this->result.<br> Requète :\"$query\"");
          error("(iud_query) Erreur lors de la connection à la base. Result: $this->result.<br> Requète :\"$query\"");
          exit();
      }
    $this->affectedRows = mysql_affected_rows($this->MyConn);
    $this->id_autoincremented = mysql_insert_id($this->MyConn);
    return $this->result;
    }


//*************************************************************************************************

  function basic_query($query)
  // fait une requete sans mettre à jour les champs
  // $query : la requète
  // retour : $result
  // Attention : ne s'arrète pas si la requète est invalide
    {
    if ($this->isConnected == false)
      $this->connect();

    $this->result = @mysql_query($query);
    return $this->result;
    }

//*************************************************************************************************
    
function array_query($query) {
    if ($this->isConnected == false)
        $this->connect();
        
    $this->sort = @mysql_query($query);
    return $this->sort;
}

//*************************************************************************************************
    
function retourArray() {
    if ($this->isConnected == false)
        $this->connect();
    
    if (!empty($this->sort))
    {
        $array = @mysql_fetch_array($this->sort);
    }
    else
    {
        $array = false;
    }
    return $array;
}
//**************************************************************************************************

  function retourLigne()
  // récupère les résultats de la dernière commande "SELECT"
  // retour : la première ligne de résultat (tableau associatif)
  // exemple : $retour["login"]
    {
    if ($this->isConnected == false)
      $this->connect();

    if ($this->num_rows > 0)
      {
      $retour = mysql_fetch_array($this->result);
      }
    else
      {
      $retour = false;
      }
    return $retour;
    }

//**************************************************************************************************

  function retourFields()
  // récupère les rlésultats de la dernière commande "SELECT"
  // retour : la première ligne de résultat (tableau associatif)
  // exemple : $retour[0]
    {
    if ($this->isConnected == false)
      $this->connect();

    if ($this->num_rows > 0)
        {
                $i = 0;
                while ($i < mysql_num_fields($this->result))
                {
                        //echo "Détails sur la colonne $i :<br />\n";
                        $meta = mysql_fetch_field($this->result, $i);
                        //echo $meta->name;
                        $tabFields[$i]=$meta->name;
                        $i++;
                }
      $retour = $tabFields;
      }
    else
      {
      $retour = false;
      }
    return $retour;
    }

//**************************************************************************************************

  function retourLigne2()
  // récupère les résultats de la dernière commande "SELECT"
  // retour : la première ligne de résultat (tableau associatif)
  // exemple : $retour[0]
    {
    if ($this->isConnected == false)
      $this->connect();

    if ($this->num_rows > 0)
      {
      $retour = mysql_fetch_row($this->result);
      }
    else
      {
      $retour = false;
      }
    return $retour;
    }

//**************************************************************************************************

  function retour_liste()
  // renvoie un tableau contenant la première colonne du résultat de
  // la requète
  // pas d'argument
  // retour : renvoie le tableau
    {
    if ($this->isConnected == false)
      $this->connect();

    $a = array();
    while ($tmp = mysql_fetch_row($this->result) )
      {
      //  $tmp[0] = addslashes($tmp[0]);
      $a[count($a)] = $tmp[0];
      }
    return $a;
    }

    
    function escape($content) {
        if ($this->isConnected == false)
            $this->connect();
        
        return mysql_real_escape_string($content);
    }
}
?>
